package algorithm;

import java.util.ArrayList;
import java.util.List;

/**
 * 约瑟夫问题
 * 古代某法官要判决N个犯人的死刑，他有一条荒唐的法律，将犯人站成一个圆圈，
 * 从第S个人开始数起，每数到第D个犯人，就拉出来处决，直到剩下最后一个予以赦免。
 * 丢手绢的游戏，也是如此
 */
public class Josephus {
    private static List<String> list = new ArrayList();
    public static void main(String[] args) {
        load(5);
        System.out.println(list);
        int begin = 1;//从哪个开始
        int distance = 2;//第几个出
        int index = begin -1;
        while(list.size() > 1) {
            index = (index+distance-1) % list.size();//*
            System.out.println("index:"+index);
            System.out.println("remove:"+list.get(index));
            list.remove(list.get(index));
        }
        System.out.println(list);
        System.out.println("FINISH");
    }

    /**
     * 初始化固定容量的数组
     * @param capacity
     */
    public static void load(int capacity) {
        for (int i = 0; i < capacity; i++) {
            String str = String.valueOf((char) ('A' + i));
            //System.out.println(str);
            list.add(str);
        }
    }
}
